package yl.hs.bmipfull.service.material;

import org.springframework.web.bind.annotation.RequestBody;
import yl.hs.bmipfull.pojo.material.WarehouseEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;

import java.util.List;
import java.util.Map;

/**
 * 作用:  仓库信息服务层接口<br/>
 * 创建时间: 2021年05月19日 11时02分59秒 <br/>
 *
 * @author 张凯
 */

public interface IRMWarehouseService extends IBaseService {

    /**
     * 查询仓库信息信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @return 仓库信息-List<{@link WarehouseEntity}>
     * @throws Exception 查询参数异常
     */
    List<WarehouseEntity> queryList(PageQuery pageQuery) throws Exception;

    /**
     * 查询仓库信息信息
     *
     * @param type      仓库
     * @param productSN 产品编号
     * @param lineSN    生产线编号
     * @return 仓库信息-List<{@link WarehouseEntity}>
     * @throws Exception 查询参数异常
     */
    List<WarehouseEntity> queryList(short type, String productSN, String lineSN) throws Exception;

    /**
     * 查询仓库信息信息
     * @param rmSN   原材编号
     * @param lineSN 生产线编号
     * @return 仓库信息-List<{@link WarehouseEntity}>
     * @throws Exception 查询参数异常
     */
    List<WarehouseEntity> queryPortList(String rmSN, String lineSN) throws Exception;

    /**
     * 查询仓库信息信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<WarehouseEntity> queryPage(PageQuery pageQuery, int rowNum, int page) throws Exception;


    /**
     * 根据仓库信息编号查询仓库信息信息
     *
     * @param sn 编号
     * @return 仓库信息-{@link WarehouseEntity}
     */
    WarehouseEntity findBySn(String sn);

    /**
     * 保存仓库信息信息
     *
     * @param model 仓库信息表单信息
     * @param sn    仓库信息信息原有编号
     * @return 执行结果-受影响行数-Integer
     * @throws Exception 保存异常
     */
    Integer saveWarehouse(@RequestBody Map<String, Object> model, String sn) throws Exception;

    /**
     * 根据仓库信息编号删除仓库信息信息
     *
     * @param sn 仓库信息编号
     * @return 影响行数
     */
    Integer delete(String[] sn);
    /**
     * 根据仓库信息编号恢复仓库信息信息
     *
     * @param sn 仓库信息编号
     * @return 影响行数
     */
    Integer recovery(String[] sn,short state);
    /**
     * 查询原材仓库信息
     *
     * @return 仓库信息
     */
    List<WarehouseEntity> queryWarehoserAll(String whUseType);

    /**
     * 查询原材仓库信息
     *
     * @return 仓库信息
     */
    List<WarehouseEntity> queryAll();
    /**
     * 根据仓库信息编号修改状态
     *
     * @param snArray 仓库信息编号数组
     * @param state
     * @return
     */
    Integer changeStateBySn(String[] snArray, short state);
    /**
     * 更新仓库信息
     */
    Integer update(WarehouseEntity entity);

    /**
     * 查询原材仓库信息
     * @param whUseType 使用类型
     * @param lineSn 生产线编号
     * @param isRawMaterials 是否为原材仓库
     * @return 仓库信息
     */
    List<WarehouseEntity>  queryList(String whUseType, String lineSn,boolean isRawMaterials);
}